package com.tong.hao.common.configuration.listener;

import lombok.extern.slf4j.Slf4j;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

/**
 * @ClassName AcServletRequestListener
 * @Author 友野浩二
 * @Description Request监听器
 * @Version 1.0
 *
 * <pre>
 * 监听器：
 *      listener是servlet规范中定义的一种特殊类。用于监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件。
 *      监听域对象的属性发生修改的事件。用于在事件发生前、发生后做一些必要的处理。
 *
 *      1- 监听器类应该实现下面接口之一：
 *          a.对Request的监听有ServletRequestListener和ServletRequestAttributeListener
 *              前者可见监听Request的创建和销毁；
 *              而后者可以对Request的属性进行监听。
 *          b.对Session的监听有HttpSessionListener和HttpSessionAttributeListener
 *              HttpSessionListener可以监听HttpSession的创建跟销毁；
 *              而HttpSessionAttributeListener则是对session中属性的监听，它可以监听到session新增属性、移除属性和属性值被替换时。
 *          c.对于ServletContext的监听器有ServletContextListener和ServletContextAttributeListener
 *              ServletContextListener可以监听到ServletContext的创建和销毁；
 *              ServletContextAttributeListener可以监听到ServletContext中属性的新增、移除和属性值的替换。
 *      2- 在启动类中加入@ServletComponentScan进行自动注册即可
 * </pre>
 */
@WebListener
@Slf4j
public class HaoServletRequestListener implements ServletRequestListener, ServletRequestAttributeListener {

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
//        log.info("Hao Common Request initialized");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
//        log.info("Hao Common Request destroyed");
    }

    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
//        log.info("Hao Common Request attribute added");
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
//        log.info("Hao Common Request attribute removed");
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
//        log.info("Hao Common Request attribute replaced");
    }
}
